#ifndef BASED_OPERATION_H
#define BASED_OPERATION_H

//#include "../../../stack/src/based_operation.h"
#include <stdio.h>
#include <stdlib.h>

#define eleType char
//二叉树的链式表示
typedef struct BiTNode{
    eleType data;
    struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;

//定义二叉树用的栈
typedef struct BiTStack{
    BiTNode *elements;
    int size;
    int capacity;
}BiTStack;

void InitStack(BiTStack &s);
void DestroyStack(BiTStack &s);
void ClearStack(BiTStack &s);
bool IsEmpty(BiTStack &s);
void Pop(BiTStack &s,eleType &element);
void Push(BiTStack &s,const eleType &element);
//先序递归
void PreOrderTraverse(BiTree &T);
//中序递归
void InOrderTraverse(BiTree &T);
//后序递归
void PostOrderTraverse(BiTree &T);
//先序非递归
void non_PreOrderTraverse(BiTree &T);
//中序非递归
void non_InOrderTraverse(BiTree &T);
//后序非递归
void non_PostOrderTraverse(BiTree &T);
//层次遍历
void LevelOrderTraverse(BiTree &T);
//基于先序序列的二叉树创建算法
void CreateBiTree(BiTree &T);
//基于先序顺序的二叉树结点查找算法
BiTNode* FindNode(BiTree &T,eleType x);
//基于后序顺序的二叉树高度计算算法
int BiTreeDepth(BiTree &T);
//基于先序顺序的二叉树显示递归算法
void ShowBiTree(BiTree &T);
//基于后序顺序的二叉树销毁算法
BiTree DestroyBiTree(BiTree &T);
//基于层次遍历的判断二叉树是否为完全二叉树的算法
int IsComplete(BiTree &T);
#endif